﻿/*****************************************************************//**
 *
 * @file   FITKOCCHDF5AdaptorOperGeometryCurve.h
 * @brief  HDF5 Adaptor OperGeometryCurve。
 * @author fulipeng (flipengqd@yeah.net)
 * @date   2024-09-11
 *
 *********************************************************************/
#ifndef __FITKOCCHDF5ADAPTOROPERGEOMETRYCURVE_H__
#define __FITKOCCHDF5ADAPTOROPERGEOMETRYCURVE_H__

#include "FITKGeoOCCIOHDF5API.h"
#include "FITKOCCHDF5AdaptorBasicGeometryCurve.h"
#include "FITK_Kernel/FITKCore/FITKCoreMacros.h"
#include "FITK_Kernel/FITKAdaptor/FITKIOAdaptorFactory.h"
#include "FITK_Interface/FITKInterfaceIO/FITKAbstractHDF5Writer.h"
#include "FITK_Interface/FITKInterfaceGeoIOHDF5/FITKAbstractHDF5Adaptor.h"

ForwardDeclarNS(Core, FITKAbstractDataObject);
ForwardDeclarNS(Interface, FITKAbsGeoCommand);
ForwardDeclarNS(Interface, FITKAbsGeoModelCurve);
ForwardDeclarNS(Interface, FITKAbsGeoModelOperLine);
ForwardDeclarNS(H5, H5File);
ForwardDeclarNS(H5, Group);
ForwardDeclarNS(H5, H5Object);
ForwardDeclarNS(H5, DataType);

namespace IO
{
    /**
    * @brief HDF5 Adaptor Oper Geometry Curve
    * @author fulipeng (fulipengqd@yeah.net)
    * @date 2024-09-11
    */
    class FITKGEOOCCIOHDF5API FITKOCCHDF5AdaptorOperGeometryCurve : public FITKOCCHDF5AdaptorBasicGeometryCurve
    {
    public:
        /**
         * @brief Construct a new FITKOCCHDF5AdaptorOperGeometryCurve object
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        explicit FITKOCCHDF5AdaptorOperGeometryCurve() = default;
        virtual ~FITKOCCHDF5AdaptorOperGeometryCurve() = default;

        /**
         * @brief 获取适配器数据类型名
         * @return 适配器数据类型名
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        QString getAdaptorClass() override;

        /**
         * @brief 适配器读取
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool adaptR() override;

        /**
         * @brief 适配器写出
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool adaptW() override;

    protected:

        /**
         * @brief 读取操作几何曲线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool readOperGeometryCurve(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何曲线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool writeOperGeometryCurve(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 读取操作几何 裁剪曲线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool readOperGeometryTrimmedCurve(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何 裁剪曲线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool writeOperGeometryTrimmedCurve(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 读取操作几何 偏移曲线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-10
         */
        bool readOperGeometryOffsetCurve(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何 偏移曲线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-10
         */
        bool writeOperGeometryOffsetCurve(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 读取操作几何 线在面上的投影
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool readOperGeometryCurveProjectionOnSurface(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何 线在面上的投影
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool writeOperGeometryCurveProjectionOnSurface(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 读取操作几何 面和面的交线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool readOperGeometrySurfaceIntersectionSurface(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何 面和面的交线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool writeOperGeometrySurfaceIntersectionSurface(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 读取操作几何 桥接曲线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool readOperGeometryBridgeCurve(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何 桥接曲线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool writeOperGeometryBridgeCurve(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 读取操作几何 面的边线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool readOperGeometrySurfaceEdge(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何 面的边线
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool writeOperGeometrySurfaceEdge(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 读取操作几何 基类
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool readOperGeometryOperLineBase(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何 基类
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool writeOperGeometryOperLineBase(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 读取操作几何 合并线数据结构
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool readOperGeometryMergeOperLine(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何 合并线数据结构
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool writeOperGeometryMergeOperLine(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 读取操作几何 线中点分割操作数据结构
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool readOperGeometryMiddleOperLine(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何 线中点分割操作数据结构
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool writeOperGeometryMiddleOperLine(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 读取操作几何 合并线数据结构
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool readOperGeometryAngleOperLine(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);

        /**
         * @brief 写出操作几何 合并线数据结构
         * @param comm 几何命令
         * @param h5Group 数据块
         * @return 状态 true成功， false失败
         * @author fulipeng (fulipengqd@yeah.net)
         * @date 2024-09-11
         */
        bool writeOperGeometryAngleOperLine(Interface::FITKAbsGeoCommand* comm, H5::Group& h5Group);
    };

    Register2FITKIOAdaptorFactory(HDF5, Interface::FITKAbsGeoModelCurve, FITKOCCHDF5AdaptorOperGeometryCurve, 1)
    Register2FITKIOAdaptorFactory(HDF5, Interface::FITKAbsGeoModelOperLine, FITKOCCHDF5AdaptorOperGeometryCurve, 2)

}


#endif
